GitHub Actions でリストを含む JSON ファイルを作成する
こんにちは、製造ビジネステクノロジー部の若槻です。
今回は、GitHub Actions でリストを含む JSON ファイルを作成する処理を実装する機会があったので、使用したスクリプトおよび試行錯誤内容を共有します。
確認してみた
はじめに結論
結論としては、次のようなスクリプトでリストを含む JSON ファイルを作成できました。
配列が含まれる JSON ファイルを新規作成する場合
配列が含まれる JSON ファイルを jq コマンドを使って新規作成する場合は、以下のようなスクリプトになります。
# orgs フィールドに配列が含まれる JSON ファイルを新規作成
echo -e '{"orgs": ["組織A", "組織B"]}' | jq > sample1.json
次のような JSON ファイルが作成されます。
cat sample1.json
{
"orgs": [
"組織A",
"組織B"
]
}
既存の JSON ファイルに配列を含むフィールドを追加する場合
配列を含むフィールドを既存の JSON ファイルに jq コマンドを使って追加する場合は、以下のようなスクリプトになります。
# user フィールドが追加された既存の JSON ファイルに orgs フィールドを追加
jq --raw-output '{"user": .user, "orgs": ["組織C", "組織D"]}' sample2.json > tmp.json
mv tmp.json sample2.json
次のような JSON ファイルが作成されます。
cat sample
{
"user": "hoge",
"orgs": [
"組織C",
"組織D"
]
}
GitHub Actions で動作確認
先ほどのコマンドを GitHub Actions ワークフロー上で使用して動作確認してみます。
name: Add JSON file test
on: workflow_dispatch
jobs:
create_json:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# sample1: 配列を含む新規の JSON ファイルを新規作成
- name: Create sample1.json
run: |
echo -e '{"orgs": ["組織A", "組織B"]}' | jq > sample1.json
# sample1: 作成した JSON ファイルを確認
- name: sample1.json output
run: cat sample1.json
# sample2: 既存のフィールドを持つ JSON ファイルを作成
- name: Create sample2.json
run: |
echo -e '{ "user": "hoge" }' | jq > sample2.json
# sample2: 既存の JSON ファイルの orgs フィールドを配列で更新
- name: Update orgs sample2.json
run: |
jq --raw-output '{"user": .user, "orgs": ["組織C", "組織D"]}' sample2.json > tmp.json
mv tmp.json sample2.json
# sample2: 作成した JSON ファイルを確認
- name: sample2.json output
run: cat sample2.json
期待通りに JSON ファイルが作成されました。良さそうですね。
試行錯誤
jossef/action-set-json-field アクションを使った場合、配列が文字列として出力される
jossef/action-set-json-field
アクションを使うと、GitHub Actions で JSON ファイルへのフィールドの更新を簡単な記述で実装することができます。
当初はこのアクションを下記のように使おうとしました。
# 中略
- name: Update orgs config.json
uses: jossef/action-set-json-field@v2.2
with:
file: sample.json
field: orgs
value: '["組織A","組織B"]'
しかし次のように配列が文字列として出力されてしまいました。
{
"orgs": "[\"組織A\",\"組織B\"]"
}
このように jossef/action-set-json-field アクションではフィールドの値によっては対応できない場合があるので注意が必要です。
--raw-output オプションを使わない場合、配列が文字列として出力される
jq コマンドの --raw-output
オプションは -r
とも記載でき、jq による変換結果を RAW 出力させることができ、冒頭のスクリプトでも使用しています。
よって --raw-output
オプションを使わない場合は、前項の試行錯誤と同様に、次のように配列が文字列として出力されてしまいます。
{
"orgs": "[\"組織A\",\"組織B\"]"
}
オプションの付け忘れが無いように注意しましょう。
おわりに
GitHub Actions ででリストを含む JSON ファイルを作成する処理を実装する機会があったので、使用したスクリプトおよび試行錯誤内容を共有します。
GitHub で何らかのコンフィグファイルを管理するために JSON ファイルの作成や更新を GitHub Actions で効率化したい場面は多いと思うので、そのような場合に参考にしてみてください。
以上